package com.ldu.houserent.controller.backend;

import com.ldu.houserent.common.base.BaseController;
import com.ldu.houserent.common.constant.Constant;
import com.ldu.houserent.common.dto.JsonResult;
import com.ldu.houserent.common.util.FileUtil;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpSession;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/*
    文件上传控制器
 */
@Controller
@RequestMapping("/file")
public class FileController extends BaseController {
    /*
        实现文件上传功能
     */
    @RequestMapping(value = "/upload",method = RequestMethod.POST)
    @ResponseBody       //用于返回Json
    public JsonResult upload(@RequestParam("file")MultipartFile file, @RequestParam("key")String key, HttpSession session){
        //声明map
        Map<String,String> map = new HashMap<>();
        try {
            //调用文件上传处理的类，将结果存到map中
            map=FileUtil.upload(file);
        } catch (Exception e) {
            e.printStackTrace();
            return JsonResult.error("上传失败");
        }
        String filePath = map.get("filePath");        //获取到上传路径
        //将图片url存到session中
        String sessionKey = Constant.SESSION_IMG_PREFIX + key;      //不可能在每次上传后都重新new一个imgList，所以将imgList存到session中     //key是前端传过来的，是用户进入页面的时间
        //若支持多个同时上传，那么就需要先定义一个list，把上传的路径都存到list中
        List<String> imgList = (List<String>) session.getAttribute(sessionKey);     //先从session中判断用户有没有传过img，如果没有就执行if，如果传过，则跳过if
        if (imgList==null){     //如果图片列表不存在，则新建
            imgList=new ArrayList<>();
        }
        imgList.add(filePath);      //将上传路径存到list中
        session.setAttribute(sessionKey,imgList);
        return JsonResult.success("上传成功！");

    }

}
